package com.ruoyi.nongjt.service.impl;

import java.util.List;
import java.util.Arrays;
import java.util.ArrayList;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.nongjt.mapper.SupervisionUnitMapper;
import com.ruoyi.nongjt.domain.SupervisionUnit;
import com.ruoyi.nongjt.service.ISupervisionUnitService;
import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * 监管单位管理Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-01-01
 */
@Service
public class SupervisionUnitServiceImpl implements ISupervisionUnitService 
{
    @Autowired
    private SupervisionUnitMapper supervisionUnitMapper;
    
    private ObjectMapper objectMapper = new ObjectMapper();

    /**
     * 查询监管单位管理
     * 
     * @param id 监管单位管理主键
     * @return 监管单位管理
     */
    @Override
    public SupervisionUnit selectSupervisionUnitById(Long id)
    {
        SupervisionUnit unit = supervisionUnitMapper.selectSupervisionUnitById(id);
        if (unit != null) {
            processConfigurationItems(unit);
        }
        return unit;
    }

    /**
     * 查询监管单位管理列表
     * 
     * @param supervisionUnit 监管单位管理
     * @return 监管单位管理
     */
    @Override
    public List<SupervisionUnit> selectSupervisionUnitList(SupervisionUnit supervisionUnit)
    {
        List<SupervisionUnit> list = supervisionUnitMapper.selectSupervisionUnitList(supervisionUnit);
        for (SupervisionUnit unit : list) {
            processConfigurationItems(unit);
        }
        return list;
    }

    /**
     * 新增监管单位管理
     * 
     * @param supervisionUnit 监管单位管理
     * @return 结果
     */
    @Override
    public int insertSupervisionUnit(SupervisionUnit supervisionUnit)
    {
        supervisionUnit.setCreateTime(DateUtils.getNowDate());
        return supervisionUnitMapper.insertSupervisionUnit(supervisionUnit);
    }

    /**
     * 修改监管单位管理
     * 
     * @param supervisionUnit 监管单位管理
     * @return 结果
     */
    @Override
    public int updateSupervisionUnit(SupervisionUnit supervisionUnit)
    {
        supervisionUnit.setUpdateTime(DateUtils.getNowDate());
        return supervisionUnitMapper.updateSupervisionUnit(supervisionUnit);
    }

    /**
     * 批量删除监管单位管理
     * 
     * @param ids 需要删除的监管单位管理主键
     * @return 结果
     */
    @Override
    public int deleteSupervisionUnitByIds(Long[] ids)
    {
        return supervisionUnitMapper.deleteSupervisionUnitByIds(ids);
    }

    /**
     * 删除监管单位管理信息
     * 
     * @param id 监管单位管理主键
     * @return 结果
     */
    @Override
    public int deleteSupervisionUnitById(Long id)
    {
        return supervisionUnitMapper.deleteSupervisionUnitById(id);
    }

    /**
     * 根据省市区查询监管单位
     * 
     * @param province 省份
     * @param city 城市
     * @param district 区县
     * @return 监管单位
     */
    @Override
    public SupervisionUnit selectSupervisionUnitByRegion(String province, String city, String district)
    {
        return supervisionUnitMapper.selectSupervisionUnitByRegion(province, city, district);
    }

    /**
     * 检查省市区是否已存在监管单位
     * 
     * @param province 省份
     * @param city 城市
     * @param district 区县
     * @return 结果
     */
    @Override
    public boolean checkRegionExists(String province, String city, String district)
    {
        int count = supervisionUnitMapper.checkRegionExists(province, city, district);
        return count > 0;
    }
    
    /**
     * 处理配置项数据
     * 
     * @param unit 监管单位
     */
    private void processConfigurationItems(SupervisionUnit unit) {
        if (unit.getConfigurationItems() != null && !unit.getConfigurationItems().isEmpty()) {
            try {
                // 如果是JSON数组格式，解析为List
                if (unit.getConfigurationItems().startsWith("[")) {
                    String[] items = objectMapper.readValue(unit.getConfigurationItems(), String[].class);
                    unit.setConfigurationItemsList(Arrays.asList(items));
                } else {
                    // 如果是逗号分隔的字符串，直接分割
                    String[] items = unit.getConfigurationItems().split(",");
                    unit.setConfigurationItemsList(Arrays.asList(items));
                }
            } catch (Exception e) {
                // 解析失败，使用逗号分隔的方式
                String[] items = unit.getConfigurationItems().split(",");
                unit.setConfigurationItemsList(Arrays.asList(items));
            }
        } else {
            unit.setConfigurationItemsList(new ArrayList<>());
        }
    }
}
